home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1984-04-24 | 6.7 KB | 262 lines |
- 1000 ' *****RANDOM MUSIC********
- 1010 ' *****VERSION 1.0*********
- 1020 ' ******BY JAMES EDMUNDS******
- 1030 ' ******Source Mail:BCA034****
- 1040 CLS: KEY OFF
- 1050 COLOR 7,0
- 1060 LOCATE 6,10:PRINT STRING$(60,14)
- 1070 LOCATE 18,10:PRINT STRING$(60,14)
- 1080 FOR J=6 TO 18
- 1090 LOCATE J,10:PRINT CHR$(14)
- 1100 LOCATE J,70:PRINT CHR$(14)
- 1110 NEXT
- 1120 LOCATE 8,28:PRINT "R A N D O M M U S I C";
- 1130 LOCATE 10,32:PRINT "by James Edmunds*";
- 1140 LOCATE 14, 34:PRINT "Version 1.0";
- 1150 LOCATE 17,12:PRINT "*[Source ID:BCA034]";
- 1160 ' Random music graphics
- 1170 FOR RG=1 TO 4
- 1180 COLOR 15,0
- 1190 LOCATE 6,37:PRINT CHR$(14);
- 1200 PLAY "l2a+"
- 1210 FOR DELAY=1 TO 300:NEXT DELAY
- 1220 COLOR 7,0
- 1230 LOCATE 6,37:PRINT CHR$(14);
- 1240 COLOR 15,0
- 1250 LOCATE 12,10:PRINT CHR$(14);
- 1260 PLAY "l16d"
- 1270 FOR DELAY=1 TO 300:NEXT DELAY
- 1280 COLOR 7,0
- 1290 LOCATE 12,10:PRINT CHR$(14);
- 1300 COLOR 15,0
- 1310 LOCATE 18,53:PRINT CHR$(14);
- 1320 PLAY "l4c
- 1330 FOR DELAY=1 TO 300:NEXT DELAY
- 1340 COLOR 7,0
- 1350 LOCATE 18,53:PRINT CHR$(14);
- 1360 COLOR 15,0
- 1370 LOCATE 9,70:PRINT CHR$(14);
- 1380 PLAY "l8f+"
- 1390 FOR DELAY=1 TO 300:NEXT DELAY
- 1400 COLOR 7,0
- 1410 LOCATE 9,70:PRINT CHR$(14);
- 1420 NEXT RG
- 1430 FOR DELAY=1 TO 500:NEXT DELAY
- 1440 CLS
- 1450 '
- 1460 '
- 1470 ' goto first explanation screen
- 1480 '
- 1490 '
- 1500 LOCATE 8
- 1510 PRINT " RANDOM MUSIC is a program that allows you to have the IBM
- 1520 PRINT "Personal Computer play randomly generated music. You will be asked
- 1530 PRINT "to set the tempo, duration, and scale-weighting of the random
- 1540 PRINT "music that the computer will generate. You'll do so by simply
- 1542 PRINT "PRESSING the letter corresponding to your choice.
- 1550 PRINT
- 1560 PRINT " With the screens that ask you to set these parameters, there
- 1570 PRINT "are help screens available. To see a help screen, simply type <H>
- 1580 PRINT "and an explanation will appear.
- 1590 LOCATE 23:PRINT " Press the space bar to continue....";
- 1600 ZZZ$=INKEY$:IF ZZZ$="" THEN GOTO 1600
- 1610 CLS
- 2000 '
- 2010 CLS
- 2020 ' first screen set tempo
- 2030 COLOR 1,7,0:LOCATE 3,24:PRINT "T E M P O";
- 2040 COLOR 15,0:LOCATE 5,24:PRINT "S";
- 2050 COLOR 7,0:LOCATE 5,30:PRINT "Slow";
- 2060 COLOR 15,0:LOCATE 7,24:PRINT "M";
- 2070 COLOR 7,0:LOCATE 7,30:PRINT "Medium";
- 2080 COLOR 15,0:LOCATE 9,24:PRINT "F";
- 2090 COLOR 7,0:LOCATE 9,30:PRINT "Fast";
- 2100 LOCATE 10,24:PRINT "_______________";
- 2110 COLOR 15,0:LOCATE 12,24:PRINT "H";
- 2120 COLOR 7,0:LOCATE 12,30:PRINT "Help";
- 2130 '
- 2140 ' get choice
- 2150 '
- 2160 T$=INKEY$:IF T$="" THEN GOTO 2160
- 2170 IF T$="S" OR T$="s" THEN PLAY "T60":GOTO 3000
- 2180 IF T$="M" OR T$="m" THEN PLAY "T120":GOTO 3000
- 2190 IF T$="F" OR T$="f" THEN PLAY "T200":GOTO 3000
- 2200 IF T$="H" OR T$="h" THEN GOTO 2300
- 2210 GOTO 2160
- 2300 ' help screen
- 2310 COLOR 0,7:LOCATE 12,10
- 2320 PRINT " EXPLANATION: ";
- 2330 COLOR 7,0:LOCATE 14,10:PRINT " The tempo of the music represents the";
- 2340 LOCATE 15,10:PRINT "number of beats per second. In our random";
- 2350 LOCATE 16,10:PRINT "music, `Slow' is 60 beats per second;";
- 2360 LOCATE 17,10:PRINT "`Medium' is 120 beats per second; and";
- 2370 LOCATE 18,10:PRINT "`Fast' is 200 beats per second.";
- 2380 GOTO 2160
- 3000 '
- 3010 ' get duration
- 3020 '
- 3030 CLS
- 3040 COLOR 1,7,0:LOCATE 3,24
- 3050 PRINT "D U R A T I O N";
- 3060 COLOR 15,0:LOCATE 5,24:PRINT "S";
- 3070 COLOR 7,0:LOCATE 5,30:PRINT "Short";
- 3080 COLOR 15,0:LOCATE 7,24:PRINT "M";
- 3090 COLOR 7,0:LOCATE 7,30:PRINT "Medium";
- 3100 COLOR 15,0:LOCATE 9,24:PRINT "L";
- 3110 COLOR 7,0:LOCATE 9,30:PRINT "Long";
- 3120 LOCATE 10,24:PRINT "_____________";
- 3130 COLOR 15,0:LOCATE 12,24:PRINT "H";
- 3140 COLOR 7,0:LOCATE 12,30:PRINT "Help";
- 3150 D$=INKEY$:IF D$="" THEN GOTO 3150
- 3160 IF D$="S" OR D$="s" THEN DD=25:GOTO 4000
- 3170 IF D$="M" OR D$="m" THEN DD=75:GOTO 4000
- 3180 IF D$="L" OR D$="l" THEN DD=150:GOTO 4000
- 3190 IF D$="H" OR D$="h" THEN GOTO 3300
- 3200 GOTO 3150
- 3300 ' duration help screen
- 3310 '
- 3320 COLOR 0,7:LOCATE 12,10
- 3330 PRINT " EXPLANATION: ";
- 3340 COLOR 7,0
- 3350 LOCATE 14,10:PRINT " The duration of the random music is simply";
- 3360 LOCATE 15,10:PRINT "the number of notes (and pauses, or rests) that";
- 3370 LOCATE 16,10:PRINT "will be played. A `Short' piece will have 25 notes;";
- 3380 LOCATE 17,10:PRINT "a `Medium' piece will have 75 notes; and a `Long'";
- 3390 LOCATE 18,10:PRINT "piece will have 150 notes.";
- 3400 GOTO 3150
- 4000 ' scale weight selection
- 4010 '
- 4020 CLS
- 4030 COLOR 1,7,0:LOCATE 3,24
- 4040 PRINT "S C A L E W E I G H T";
- 4050 COLOR 15,0: LOCATE 5,24:PRINT "C";
- 4060 COLOR 7,0: LOCATE 5,30:PRINT "Center-weighted";
- 4070 COLOR 15,0:LOCATE 7,24:PRINT "F";
- 4080 COLOR 7,0:LOCATE 7,30: PRINT "Fully random";
- 4090 LOCATE 8,24:PRINT "___________________";
- 4100 COLOR 15,0:LOCATE 10,24:PRINT "H";
- 4110 COLOR 7,0:LOCATE 10,30:PRINT "Help";
- 4120 '
- 4130 'get choice
- 4140 '
- 4150 DIST$=INKEY$:IF DIST$="" THEN GOTO 4150
- 4160 IF DIST$="F" OR DIST$="f" THEN DIST$="F":GOTO 5000
- 4170 IF DIST$="c" OR DIST$="C" THEN DIST$="C":GOTO 5000
- 4180 IF DIST$="H" OR DIST$="h" THEN GOTO 4300
- 4190 GOTO 4150
- 4300 '
- 4310 'help screen
- 4320 '
- 4330 COLOR 0,7:LOCATE 10,10
- 4340 PRINT " EXPLANATION: ";
- 4350 COLOR 7,0
- 4360 LOCATE 12,10:PRINT " The IBM Personal Computer plays a range of seven";
- 4370 LOCATE 13,10:PRINT "musical octaves. You may choose to have your random";
- 4380 LOCATE 14,10:PRINT "music piece wander completely randomly through the";
- 4390 LOCATE 15,10:PRINT "seven octaves--`fully random'--or you may make the";
- 4400 LOCATE 16,10:PRINT "music sound more `normal' by `center-weighting' the";
- 4410 LOCATE 17,10:PRINT "piece with a greater distribution of notes in the";
- 4420 LOCATE 18,10:PRINT "middle ranges of the scale. ";
- 4430 LOCATE 20,10:PRINT " Don't worry if you choose `Center-weighted'--";
- 4440 LOCATE 21,10:PRINT "it will still sound random!";
- 4450 GOTO 4150
- 5000 '
- 5010 ' here it comes
- 5020 '
- 5030 CLS
- 5040 COLOR 7,0:LOCATE 8,30:PRINT "AND NOW...";
- 5050 LOCATE 12, 32: PRINT "RANDOM MUSIC!";
- 5060 FOR DELAY=1 TO 1200:NEXT DELAY
- 5070 GOTO 8000
- 8000 CLS
- 8010 FOR D=1 TO DD
- 8020 RANDOMIZE VAL(RIGHT$(TIME$,2))
- 8030 PLAY "mf":'set length of note
- 8040 L=INT(RND*9)
- 8050 IF L=0 THEN PLAY "L11
- 8060 IF L=1 THEN PLAY "L1
- 8070 IF L=2 THEN PLAY "L2
- 8080 IF L=3 THEN PLAY "L4
- 8090 IF L=4 THEN PLAY "L8
- 8100 IF L=5 THEN PLAY "L16
- 8110 IF L=6 THEN PLAY "L32
- 8120 IF L=7 THEN PLAY "L64
- 8130 IF L=8 THEN PLAY "L21
- 8140 '
- 8150 '
- 8160 'set octave
- 8170 IF DIST$="F" OR DIST$="f" THEN GOTO 8500
- 8180 IF DIST$="C" OR DIST$="c" THEN GOTO 8200
- 8190 'centered dsitribution
- 8200 O1=INT(RND*4)
- 8210 O2=INT(RND*4)
- 8220 O=O1+O2
- 8230 IF O=0 THEN PLAY "O0
- 8240 IF O=1 THEN PLAY "O1
- 8250 IF O=2 THEN PLAY "O2
- 8260 IF O=3 THEN PLAY "O3
- 8270 IF O=4 THEN PLAY "O4
- 8280 IF O=5 THEN PLAY "O5
- 8290 IF O=6 THEN PLAY "O6
- 8300 GOTO 8600
- 8500 'fully random distribution
- 8510 O=INT(RND*7)
- 8520 IF O=0 THEN PLAY "O0
- 8530 IF O=1 THEN PLAY "O1
- 8540 IF O=2 THEN PLAY "O2
- 8550 IF O=3 THEN PLAY "O3
- 8560 IF O=4 THEN PLAY "O4
- 8570 IF O=5 THEN PLAY "O5
- 8580 IF O=6 THEN PLAY "O6
- 8590 '
- 8600 'set note
- 8610 N=INT(RND*13)
- 8620 IF N=0 THEN PLAY "P4
- 8630 IF N=1 THEN PLAY "C
- 8640 IF N=2 THEN PLAY "C+
- 8650 IF N=3 THEN PLAY "D
- 8660 IF N=4 THEN PLAY "D+
- 8670 IF N=5 THEN PLAY "E
- 8680 IF N=6 THEN PLAY "F
- 8690 IF N=7 THEN PLAY "F+
- 8700 IF N=8 THEN PLAY "G
- 8710 IF N=9 THEN PLAY "G+
- 8720 IF N=10 THEN PLAY "A
- 8730 IF N=11 THEN PLAY "A+
- 8740 IF N=12 THEN PLAY "B
- 8750 '
- 8760 ' put visual on the screen
- 8770 R=INT((RND*24)+1)
- 8780 C=INT((RND*80)+1)
- 8790 LOCATE R,C
- 8800 PRINT CHR$(14);
- 8810 NEXT D
- 8820 '
- 8830 'ask for another go-round
- 8840 '
- 8850 FOR DELAY=1 TO 3000:NEXT DELAY
- 8860 CLS
- 8870 LOCATE 8, 24:PRINT "Would you like to hear another random tune?";
- 8880 LOCATE 10,24:COLOR 15,0:PRINT "Y";
- 8890 LOCATE 10,30:COLOR 7,0:PRINT "Yes";
- 8900 LOCATE 12,24:COLOR 15,0:PRINT "N";
- 8910 LOCATE 12,30:COLOR 7,0:PRINT "No thanks";
- 8920 R$=INKEY$: IF R$="" THEN GOTO 8920
- 8930 IF R$="Y" OR R$="y" THEN GOTO 9400
- 8940 IF R$="N" OR R$="n" THEN GOTO 9200
- 8950 GOTO 8920
- 9200 CLS
- 9210 LOCATE 12,40:PRINT "Bye!";
- 9220 LOCATE 22:PRINT " ";
- 9230 END
- 9400 CLS
- 9410 LOCATE 8,24:PRINT "Do you wish to define new parameters for you next tune?";
- 9420 LOCATE 10,24:COLOR 15,0:PRINT "Y";
- 9430 LOCATE 10,30:COLOR 7,0:PRINT "Yes";
- 9440 LOCATE 12,24:COLOR 15,0:PRINT "N";
- 9450 LOCATE 12,30:COLOR 7,0:PRINT "No";
- 9460 R2$=INKEY$:IF R2$="" THEN GOTO 9460
- 9470 IF R2$="Y" OR R2$="y" THEN GOTO 2000
- 9480 IF R2$="N" OR R2$="n" THEN GOTO 5000
- 9490 GOTO 9460
-